package services.common;

import java.util.Date;
import java.util.List;
import java.util.Map;

import models.common.entity.t_audit_info_type_credit;

import org.apache.log4j.Logger;

import services.base.BaseService;

import common.enums.AuditStatus;
import common.utils.Factory;
import common.utils.LoggerUtil;
import common.utils.ResultInfo;

import daos.common.AuditInfoTypeCreditDao;

/**
 *@author zhiliang.lan
 *@version 2017年6月6日 下午3:30:12
 */
public class AuditInfoTypeCreditService extends BaseService<t_audit_info_type_credit> {
	
	private Logger log = Logger.getLogger(AuditInfoTypeCreditService.class);

	protected AuditInfoTypeCreditDao auditInfoTypeCreditDao = Factory.getDao(AuditInfoTypeCreditDao.class);
	
	protected AuditInfoTypeCreditService() {
		super.basedao = this.auditInfoTypeCreditDao;
	}

	/**
	 * 更新auditInfoTypeCredit的信息，没有则新增
	 * @param audit_info_type_credit
	 * @return
	 * @author zhiliang.lan
	 * @createDate 2017年6月6日
	 */
	public ResultInfo updateAuditInfoTypeCredit(
			t_audit_info_type_credit auditInfoTypeCredit) {
		
		ResultInfo result = new ResultInfo();
		//boolean isFlag = userInfoDao.save(userInfo);
		boolean isFlag = auditInfoTypeCreditDao.save(auditInfoTypeCredit);
		if (!isFlag) {
			result.code = -1;
			result.msg= "更新审核详情信息失败";
			LoggerUtil.error(true,"更新信息失败");
			return result;
		}
		result.code = 1;
		result.msg= "更新审核详情信息成功";
		
		return result;
	}
	
	/**
	 * 更新auditInfoTypeCredit的信息   时间，审核状态，分数，建议
	 * @param audit_info_type_credit
	 * @return
	 * @author zhiliang.lan
	 * @createDate 2017年6月6日
	 */
	public int updateAuditInfoTypeCreditTimeStatusScoreSuggest(
			long id, Date time, int status, int score ,String suggest) {
		
		/*ResultInfo result = new ResultInfo();
		//boolean isFlag = userInfoDao.save(userInfo);
		boolean isFlag = auditInfoTypeCreditDao.save(auditInfoTypeCredit);
		if (!isFlag) {
			result.code = -1;
			result.msg= "更新审核详情信息失败";
			LoggerUtil.error(true,"更新信息失败");
			return result;
		}
		result.code = 1;
		result.msg= "更新审核详情信息成功";*/
		
		return auditInfoTypeCreditDao.updateAuditInfoTypeCreditTimeStatusScoreSuggest(id,time,status,score,suggest);
	}

	/**
	 *  根据companyInfoId和infoTypeId查询企业审核一级评估资料
	 * @param userId
	 * @param infoTypeId
	 * @return
	 * @author zhiliang.lan
	 * @createDate 2017年6月6日
	 */
	public t_audit_info_type_credit findByUserIdAndInfoTypeId(
			long userId, long infoTypeId) {
		
		return auditInfoTypeCreditDao.findByUserIdAndInfoTypeId(userId, infoTypeId);
	}

	/**
	 * 查询一级大类型，混合企业审核评估资料表，显示审核状态和得分
	 * @param id
	 * @return
	 * @author zhiliang.lan
	 * @createDate 2017年6月6日
	 */
	public List<Map<String, Object>> findAuditInfoCreditByUserId(long userId) {
		
		return auditInfoTypeCreditDao.findAuditInfoCreditByUserId(userId);
	}

	/**
	 * 根据userId查询t_audit_info_type_credit中间表的列表
	 * @param userId
	 * @return
	 * @author zhiliang.lan
	 * @createDate 2017年7月18日
	 */
	public List<t_audit_info_type_credit> findList2ByUserId(long userId) {

		return auditInfoTypeCreditDao.findList2ByUserId(userId);
	}

	/**
	 * 根据userId查询t_audit_info_type_credit中间表的列表 查listMap
	 * @param userId
	 * @return
	 * @author zhiliang.lan
	 * @createDate 2017年7月18日
	 */
	public List<t_audit_info_type_credit> findListMapByUserId(long userId) {

		return auditInfoTypeCreditDao.findListByUserId(userId);
	}

	/**
	 * （一级大类型审核积分和状态的表）查找一级类型的审核记录,
	 * 如果存在则设置状态为待提交，不存在不做处理，后台审核的时候会生成词此条数据
	 * @param userId
	 * @param firstInfoTypeId
	 * @return
	 * @author zhiliang.lan
	 * @createDate 2017年8月8日
	 */
	public ResultInfo updateAuditInfoStatus(long userId, long firstInfoTypeId) {
		ResultInfo result = new ResultInfo();
		
		//（一级大类型审核积分和状态的表）查找一级类型的审核记录,如果存在则设置状态为待提交，不存在不做处理，后台审核的时候会生成词此条数据
		t_audit_info_type_credit auditInfoTypeCredit = findByUserIdAndInfoTypeId(userId, firstInfoTypeId);
		if(null == auditInfoTypeCredit){
			log.info("userId："+userId+"////firstInfoTypeId:"+firstInfoTypeId);
			auditInfoTypeCredit = new t_audit_info_type_credit();
			auditInfoTypeCredit.user_id = userId;
			auditInfoTypeCredit.info_type_id = firstInfoTypeId;
			auditInfoTypeCredit.time = new Date();
		}
		auditInfoTypeCredit.audit_status = AuditStatus.NOT_SUBMIT.code;
		//更新此条记录
		result = updateAuditInfoTypeCredit(auditInfoTypeCredit);
		if(result.code < 1){
			result.code = -1;
			result.msg = "更新审核信息失败";
			return result;
		}
		
		result.code = 1;
		result.msg = "更新审核信息成功";
		
		return result;
	}

	
}
